/**
 *	@file	safaril_sys.h
 *	@brief	サファリレイアウトツール　システムヘッダ
 *	@author	Miyuki Iwasawa
 *	@date	08.03.13
 */

#ifndef __H_SAFARIL_SYS_H__
#define __H_SAFARIL_SYS_H__

#include "savedata/safari_sv.h"
#include "system/selbox.h"
#include "system/touch_subwindow.h"
#include "system/fontoam.h"
#include "safaril_def.h"

#define SAFARIL_POAM_PALIDX	(0)
#define SAFARIL_POAM_PALNUM	(4)
#define SAFARIL_NOAM_PALIDX	(SAFARIL_POAM_PALNUM)
#define SAFARIL_NOAM_PALNUM	(4)
#define SAFARIL_SOAM_PALIDX	(SAFARIL_NOAM_PALIDX+SAFARIL_NOAM_PALNUM)
#define SAFARIL_SOAM_PALNUM	(1)

#define SAFARIL_PANEL_RESMAX	(4)

#define PANEL_ACTMAX	(12)
#define PANEL_VIEW_MAX	(6)

#define PANEL_CHAR_SIZ	(PANEL_CSX*PANEL_CSY*64)
#define PANEL_CBUF_SIZ	(PANEL_CHAR_SIZ*PANEL_VIEW_MAX)

enum{
 NACT_CURSOR,
 NACT_CURSOR_C,
 NACT_CURSOR_S,
 NACT_CURSOR_A,
 NACT_ALLOW_L,
 NACT_ALLOW_R,
 NORMAL_ACTMAX,
};

typedef struct _SAFARIL_MSG{
	MSGDATA_MANAGER *man;
	WORDSET* wset;		//ワーク
	STRBUF	*tmp;		//汎用
	STRBUF	*sel[MSGIDX_SEL_MAX];		///<選択肢
	STRBUF	*exp[MSGIDX_EXP_MAX];		///<説明文
	STRBUF	*page;	///<ページ
	STRBUF	*obj_num;	///<オブジェの個数
	u8	msg_spd;	///<メッセージスピード
	u8	dmy[3];	///<padding
}SAFARIL_MSG;

typedef struct _SAFARIL_SBOX_POS{
 u16 x,y;
}SAFARIL_SBOX_POS;

///サファリ　パネルOAMワーク
typedef struct{
	int	heapID;
	CATS_CGXOFS_MODE cgx_transofs;	///<CGX転送オフセット
	u16	res_max;
	u16	pal_num;
	u16	act_max;
	u16	vramType;

	CLACT_SET_PTR	cas;
	CLACT_SET_PTR	ref_csp;
	CLACT_U_EASYRENDER_DATA	renddata;	// 簡易レンダーデータ
	CLACT_HEADER_TBL_PTR	clh;		// ヘッダー
	CLACT_U_RES_MANAGER_PTR	resMan[SAFARIL_PANEL_RESMAX];	///< リソースマネージャ
	CLACT_U_RES_OBJ_TBL * resObjTbl[SAFARIL_PANEL_RESMAX];///< リソースオブジェテーブル

}SAFARIL_PANEL_MAN;

///サブプロセス定義用関数型
typedef struct _SAFARIL_WORK	SAFARIL_WORK;
typedef int (*SafariLKeyIn)(SAFARIL_WORK* wk);

typedef struct _SAFARI_FONTOAM{
	FONTOAM_OBJ_PTR foam;
	CHAR_MANAGER_ALLOCDATA cma;
}SAFARI_FONTOAM;

///サファリレイアウトツール　ワーク
struct _SAFARIL_WORK{
	int heapID;	///<heapID
	int	seq;	///<seq_no
	int	sub_seq;	///<sub_seq_no
	int	next_seq;

	int key_mode;	///<操作モード

	SAFARI_LTPARAM		*param;
	SAFARI_SAVE*		safari_sv;
	SAFARI_LAYOUT		layout;
	SAFARIL_MSG			msg;

	GF_BGL_INI			*bgl;
	SELBOX_SYS			*sbox;
	SAFARIL_PANEL_MAN*	panel;

	CATS_SYS_PTR	pActSys;	///<セルアクターシステム
	CATS_RES_PTR	pActRes;	///<セルアクターリソース

	CLACT_WORK_PTR		pAct[NORMAL_ACTMAX];		///<アクター
	CATS_ACT_PTR		pAPanel[PANEL_ACTMAX];

	FONTOAM_SYS_PTR		pFOamSys;	///<FontOamマネージャ
	FONTOAM_OAM_DATA_PTR pFOamData;	///<FontOam Oamデータ
	SAFARI_FONTOAM		pFontOam[BMPL_OBJ_MAX];

	GF_BGL_BMPWIN		win[WIN_MAX];
	GF_BGL_BMPWIN		win_obj;

	//選択ボックスリスト
	BMPLIST_DATA*	slist;	///<選択ボックスリスト
	BMPLIST_DATA*	dclist;	///<選択ボックスリスト
	SELBOX_WORK*	list_wk;	///<選択ボックスワーク
	TOUCH_SW_SYS*	ynbtn_wk;

	SafariLKeyIn		to_key_func;
	SafariLKeyIn		to_touch_func;

	///グラフィックリソース
	void*	pSBufFl;
	void*	pSBufWin;
	NNSG2dScreenData*	pSFl;
	NNSG2dScreenData*	pSWin;
	u8*	pCBufPanel[PANEL_CBUF_SIZ];

	u8	msg_spd;
	u8	win_type;
	u8	page;
	u8	pos;
	u8	c_pos;

	u8 scr_ct;	//スクロールカウンタ
	u8 scrl_f:1;	//スクロールフラグ
	u8 scrl_d:1;	//スクロール方向
	u8 panel_sw:1;	//パネルスイッチ
	u8 mode:5;		//モード

	u8	obj_place_f;	///<オブジェを置けるようになっているか？
	s16	scrl_m;
	s16	scrl_s;

	BOOL custom_f;	///カスタマイズしたかどうかのフラグ
};


#endif	//__H_SAFRIL_SYS_H__
